﻿using AgentListener.Model.Network;
using Common.Annotations;

namespace AgentListener.Controllers
{
    //TODO: сделать базовый класс, в котором реализовать механизм аутентификации и от него уже наследоваться
    /// <summary>
    /// Интерфейс контроллера (sync\send и пр.)
    /// </summary>
    internal interface IRequestController
    {
        /// <summary>
        /// Обрабатывает запрос
        /// </summary>
        /// <returns>true при успешной обработке, false при неудачной</returns>
        void ProcessData();

        /// <summary>
        /// true если аутентификация прошла успешно
        /// </summary>
        bool IsAuthenticated { get; }

        [CanBeNull]
        ResponseInfo Response { get; }

        /// <summary>
        /// Отсылает ответ и закрывает соединение
        /// </summary>
        void Close();

        /// <summary>
        /// Проверка токенов и хэшей
        /// </summary>
        /// <returns>true, если прошел аутентификацию</returns>
        bool Authenticate();
    }
}